class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm;
    this.key = key; // data中的属性名
    this.cb = cb; // 负责更新试图的回调函数s

    // 把watcher对象记录到Dep类的静态属性target
    Dep.target = this;
    // 触发get方法，在get方法中会调用addSub
    this.oldValue = vm[key];
    Dep.target = null;
  }

  // 当数据发生变化时更新试图
  update() {
    let newValue = this.vm[this.key];
    if (newValue === this.oldValue) {
      return;
    }
    this.cb(newValue);
  }
}
